/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package th.stripes.util;

import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import th.dao.KodAlasanDAO;
import th.dao.KodJenisPengajianDAO;
import th.dao.KodJenisSekolahDAO;
import th.dao.KodStatusDAO;
import th.dao.KodSektorPekerjaanDAO;
import th.dao.KodKahwinDAO;
import th.dao.KodNegeriDAO;
import th.dao.KodPekerjaanDAO;
import th.dao.KodPerananDAO;
import th.dao.KodSekolahDAO;
import th.dao.KodTahapPengajianDAO;
import th.dao.KodUniversitiDAO;
import th.dao.PoskodDAO;
import th.dao.KodHubunganDAO;
import th.dao.KodWarganegaraDAO;
import th.dao.KodBandarDAO;
import th.dao.KodFakultiDAO;
import th.dao.KodJantinaDAO;
import th.dao.KodPengajianDAO;
import th.dao.KodStatusHajiDAO;
import th.dao.KodTransaksiDAO;
import th.dao.PusatKosDAO;
import th.dao.TahunPilihanDAO;
import th.model.KodJenisPengajian;
import th.model.KodJenisSekolah;
import th.model.KodKahwin;
import th.model.KodNegeri;
import th.model.KodStatus;
import th.model.KodPekerjaan;
import th.model.KodPeranan;
import th.model.KodSekolah;
import th.model.KodHubungan;
import th.model.KodTahapPengajian;
import th.model.KodSektorPekerjaan;
import th.model.KodWarganegara;
import th.model.KodUniversiti;
import th.model.KodBandar;
import th.model.KodFakulti;
import th.model.KodPengajian;
import th.model.KodStatusHaji;
import th.model.TahunPilihan;
import th.model.KodAlasan;
import th.model.KodJantina;
import th.model.KodTransaksi;
import th.model.PusatKos;
import th.stripes.BaseActionBean;

/**
 *
 * @author ubuntu
 */
public class ListUtil extends BaseActionBean {

    
    @Inject KodNegeriDAO kodNegeriDAO;
    @Inject PoskodDAO poskodDAO;
    @Inject KodSekolahDAO kodSekolahDAO;
    @Inject KodJenisSekolahDAO kodJenisSekolahDAO;
    @Inject KodTahapPengajianDAO kodTahapPengajianDAO;
    @Inject KodJenisPengajianDAO kodJenisPengajianDAO;
    @Inject KodKahwinDAO kodKahwinDAO;
    @Inject KodPekerjaanDAO kodPekerjaanDAO;
    @Inject KodStatusDAO kodStatusDAO;
    @Inject KodHubunganDAO kodHubunganDAO;
    @Inject KodSektorPekerjaanDAO kodSektorPekerjaanDAO;
    @Inject KodWarganegaraDAO kodWarganegaraDAO;
    @Inject KodPerananDAO kodPerananDAO;
    @Inject KodUniversitiDAO kodUniversitiDAO;
    @Inject KodBandarDAO kodBandarDAO;
    @Inject KodStatusHajiDAO kodStatusHajiDAO;
    @Inject KodFakultiDAO kodFakultiDAO;
    @Inject KodPengajianDAO kodPengajianDAO;
    @Inject TahunPilihanDAO tahunPilihanDAO;
    @Inject KodAlasanDAO kodAlasanDAO;
    @Inject KodTransaksiDAO kodTransaksiDAO;
    @Inject KodJantinaDAO kodJantinaDAO;
    @Inject PusatKosDAO pusatKosDAO;
    
    @Inject
    protected com.google.inject.Provider<Session> sessionProvider;
    
    public List<PusatKos> getPusatKos() {
        return pusatKosDAO.findAll();
    } 
    
    public List<KodNegeri> getSenaraiNegeri() {
        return kodNegeriDAO.findAll();
    }   
    
    public List<KodSekolah> getSenaraiSekolah() {
        return kodSekolahDAO.findAll();
    }
    
    public List<KodJenisSekolah> getSenaraiJenisSekolah() {
        return kodJenisSekolahDAO.findAll();
    }
    
    public List<KodPengajian> getSenaraiPengajian(String tahapPengajian){
        Session session = sessionProvider.get();
        StringBuilder sb = new StringBuilder("Select p from KodPengajian p where 1=1 ");
        if (StringUtils.isNotBlank(tahapPengajian)){
            sb.append("AND peringkat = :tahapPengajian ");
        }
        Query query = session.createQuery(sb.toString());
        if (StringUtils.isNotBlank(tahapPengajian)){
            query.setString("tahapPengajian", tahapPengajian);
        }
        return query.list();
    }
    
    public List<KodTahapPengajian> getSenaraiTahapPengajian() {
        return kodTahapPengajianDAO.findAll();
    }
    
    public List<KodJenisPengajian> getSenaraiJenisPengajian() {
        return kodJenisPengajianDAO.findAll();
    }
    public List<KodKahwin> getSenaraiPerkahwinan () {
        return kodKahwinDAO.findAll();
    }   
    
    public List<KodPekerjaan> getSenaraiPekerjaan() {
        return kodPekerjaanDAO.findAll();
    }
    
    public List<KodPeranan> getSenaraiPeranan() {
        return kodPerananDAO.findAll();
    }
    
    public List<KodUniversiti> getSenaraiUniversiti() {
        return kodUniversitiDAO.findAll();
    }
    
    public List<KodFakulti> getSenaraiFakulti() {
        return kodFakultiDAO.findAll();
    }
    
    public List<KodPengajian> getSenaraiPengajian() {
        return kodPengajianDAO.findAll();
    }
    
    public List<KodTransaksi> getSenaraiKodTransaksi() {
        return kodTransaksiDAO.findAll();
    }
    
    public List<KodSekolah> getSenaraiSekolah(String jenis, String kodNegeri){
        Session session = sessionProvider.get();
        StringBuilder sb = new StringBuilder("Select p from KodSekolah p where 1=1 ");
        if (StringUtils.isNotBlank(jenis)){
            sb.append("AND jenisSekolah.kod = :jenis ");
        }
        if (StringUtils.isNotBlank(kodNegeri)){
            sb.append("AND negeri.code = :negeri ");
        }
        Query query = session.createQuery(sb.toString());
        if (StringUtils.isNotBlank(jenis)){
            query.setString("jenis", jenis);
        }
        if (StringUtils.isNotBlank(kodNegeri)){
            query.setString("negeri", kodNegeri);
        }
        return query.list();
    }
    
    public List<KodStatus> getSenaraiStatus() {
        return kodStatusDAO.findAll();
    }
    
    public List<KodHubungan> getSenaraiHubungan() {
        return kodHubunganDAO.findAll();
    }
    
    /**
     * List of hubungan that available for mahram
     * @return 
     */
    public List<KodHubungan> getSenaraiHubunganMahram() {
        List hubungan = kodHubunganDAO.findAll();
        List hubunganMahram = new ArrayList();
        
         Set<String> kodM = new HashSet<String>();
         kodM.add("01");
         kodM.add("02");
         kodM.add("03");
         kodM.add("04");
         kodM.add("05");
         kodM.add("07");
         kodM.add("08");
         kodM.add("20");
        
         for (int i=0; i < hubungan.size(); i++) {
            KodHubungan kod = (KodHubungan)hubungan.get(i);
            if (kod != null) {
                 if (kodM.contains(kod.getKod())) {
                    hubunganMahram.add(kod);
                 }
            }
        }
        return hubunganMahram;
    }
    
    //edit by hasnor
    public List<KodHubungan> getSenaraiHubungan(String jantina) {
       // return kodHubunganDAO.findAll();
        
        String j = jantina;
        List hubungan = kodHubunganDAO.findAll();
        List hubunganByJantina = new ArrayList();
        
        Set<String> kodP = new HashSet<String>();
        kodP.add("11");
        kodP.add("12");
        kodP.add("13");
        kodP.add("14");
        kodP.add("15");
        kodP.add("16");
        kodP.add("17");
        
        kodP.add("19");
        
        kodP.add("21");
        kodP.add("22");
        
        kodP.add("29");
        kodP.add("30");
        kodP.add("31");
        kodP.add("32");
        
        kodP.add("35");
        
        kodP.add("37");
        kodP.add("38");
        
        kodP.add("41");
        kodP.add("42");
        kodP.add("43");
        kodP.add("44");
        kodP.add("46");
        
        kodP.add("47");
        kodP.add("48");
        kodP.add("99");
        
        Set<String> kodL = new HashSet<String>();
        kodL.add("01");
        kodL.add("02");
        kodL.add("03");
        kodL.add("04");
        kodL.add("05");
        kodL.add("06");
        kodL.add("07");
        kodL.add("08");
        
        kodL.add("18");
        kodL.add("20");
        
        kodL.add("22");
        kodL.add("23");
        kodL.add("24");
        kodL.add("25");
        kodL.add("26");
        kodL.add("27");
        
        kodL.add("33");
        kodL.add("34");
        
        kodL.add("36");
        kodL.add("39");
        kodL.add("40");
        kodL.add("45");
        
        kodL.add("47");
        kodL.add("48");
        kodL.add("99");
        
        for (int i=0; i < hubungan.size(); i++) {
            KodHubungan kod = (KodHubungan)hubungan.get(i);
            if (kod != null) {
                if (j.equalsIgnoreCase("P")) {
                    if (kodP.contains(kod.getKod())) {
                    hubunganByJantina.add(kod);

                    }
               } else if (j.equalsIgnoreCase("L")) {
                   if (kodL.contains(kod.getKod())) {
                    hubunganByJantina.add(kod);

                    }
               }
            }
        }
        return hubunganByJantina;
    }
    
    public List<KodSektorPekerjaan> getSenaraiSektorPekerjaan() {
        return kodSektorPekerjaanDAO.findAll();
    }
    
    public List<KodWarganegara> getSenaraiWarganegara() {
        return kodWarganegaraDAO.findAll();
    }
    
    public List<KodBandar> getSenaraiBandar() {
        return kodBandarDAO.findAll();
    }
   
    public List<KodStatusHaji> getSenaraiStatusHaji() {
        return kodStatusHajiDAO.findAll();
    }
    
    public List<TahunPilihan> getIslamicYear(){
        return tahunPilihanDAO.findAll();
    }
   
    public List<KodAlasan> getAlasan(){
        return kodAlasanDAO.findAll();
    }
    public List<String> getAlasanKeySeq(){
        
        List ress1=kodAlasanDAO.findAll();     
        List ress2=new ArrayList();
        for(int i=0; i<ress1.size(); i++){
            KodAlasan k=(KodAlasan)ress1.get(i);
            if(k.getKod_seq()==null){
                continue;
            }
            else{
//                if(k.getNama().startsWith("Â£")){
//                    k.setNama(k.getNama().trim().substring(4));
//                }
//                if(k.getNama().startsWith("�")){
//                    k.setNama(k.getNama().trim().substring(1));
//                }
                ress2.add(k.getKod()+" - "+k.getNama());   
            }
        }
        return ress2;
    }
    
    public List<KodJantina> getSenaraiJantina() {
        return kodJantinaDAO.findAll();
    }
}
